package edu.cebanc.spring.biblioteca.domain;

import java.sql.Timestamp;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="tbl_libros")
public class Libro {

	private int id_libro;
	private String isbn;
	private Timestamp fecha;
	
	private Set<Autor> autores = new HashSet<Autor>();
	private Set<Genero> generos = new HashSet<Genero>();
	private Set<Ejemplar> ejemplares = new HashSet<Ejemplar>();
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	@Column(name="id_libro")
	public int getId_libro() {
		return id_libro;
	}
	public void setId_libro(int id_libro) {
		this.id_libro = id_libro;
	}
	@Column(name="isbn")
	public String getIsbn() {
		return isbn;
	}
	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}
	@Column(name="fecha")
	public Timestamp getFecha() {
		return fecha;
	}
	public void setFecha(Timestamp fecha) {
		this.fecha = fecha;
	}
	@ManyToMany(cascade=CascadeType.ALL)
	@JoinTable(name="tbl_libros_tbl_autores", 
				joinColumns = { @JoinColumn(name="id_libro")}, 
				inverseJoinColumns = { @JoinColumn(name="id_autor")}
	)
	public Set<Autor> getAutores() {
		return autores;
	}
	public void setAutores(Set<Autor> autores) {
		this.autores = autores;
	}
	@ManyToMany(cascade=CascadeType.ALL)
	@JoinTable(name="tbl_libros_tbl_generos", 
				joinColumns = { @JoinColumn(name="id_libro")}, 
				inverseJoinColumns = { @JoinColumn(name="id_genero")}
	)
	public Set<Genero> getGeneros() {
		return generos;
	}
	public void setGeneros(Set<Genero> generos) {
		this.generos = generos;
	}
	@OneToMany(cascade=CascadeType.ALL)
	@JoinTable(name="tbl_libros_tbl_ejemplares", 
				joinColumns = { @JoinColumn(name="id_libro")}, 
				inverseJoinColumns = { @JoinColumn(name="id_ejemplar")}
	)
	public Set<Ejemplar> getEjemplares() {
		return ejemplares;
	}
	public void setEjemplares(Set<Ejemplar> ejemplares) {
		this.ejemplares = ejemplares;
	}
	
}
